package pe.edu.upc.e41a.javasoft.jsf;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.convert.DateTimeConverter;
import javax.faces.validator.LengthValidator;
import org.primefaces.component.autocomplete.AutoComplete;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.message.Message;
import org.primefaces.component.spinner.Spinner;
import org.primefaces.context.RequestContext;
import org.primefaces.event.CloseEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.roo.addon.jsf.managedbean.RooJsfManagedBean;
import org.springframework.roo.addon.serializable.RooSerializable;
import pe.edu.upc.e41a.javasoft.domain.Aviso;
import pe.edu.upc.e41a.javasoft.domain.Usuario;
import pe.edu.upc.e41a.javasoft.jsf.converter.UsuarioConverter;
import pe.edu.upc.e41a.javasoft.service.AvisoService;
import pe.edu.upc.e41a.javasoft.service.UsuarioService;

@Configurable
@ManagedBean(name = "avisoBean")
@SessionScoped
@RooSerializable
@RooJsfManagedBean(entity = Aviso.class, beanName = "avisoBean")
public class AvisoBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Autowired
    AvisoService avisoService;

	@Autowired
    UsuarioService usuarioService;

	private String name = "Avisoes";

	private Aviso aviso;

	private List<Aviso> allAvisoes;

	private boolean dataVisible = false;

	private List<String> columns;

	private HtmlPanelGrid createPanelGrid;

	private HtmlPanelGrid editPanelGrid;

	private HtmlPanelGrid viewPanelGrid;

	private boolean createDialogVisible = false;

	@PostConstruct
    public void init() {
        columns = new ArrayList<String>();
        columns.add("titulo");
        columns.add("mensaje");
        columns.add("posicion");
        columns.add("fechaInicio");
        columns.add("fechaFin");
    }

	public String getName() {
        return name;
    }

	public List<String> getColumns() {
        return columns;
    }

	public List<Aviso> getAllAvisoes() {
        return allAvisoes;
    }

	public void setAllAvisoes(List<Aviso> allAvisoes) {
        this.allAvisoes = allAvisoes;
    }

	public String findAllAvisoes() {
        allAvisoes = avisoService.findAllAvisoes();
        dataVisible = !allAvisoes.isEmpty();
        return null;
    }

	public boolean isDataVisible() {
        return dataVisible;
    }

	public void setDataVisible(boolean dataVisible) {
        this.dataVisible = dataVisible;
    }

	public HtmlPanelGrid getCreatePanelGrid() {
        if (createPanelGrid == null) {
            createPanelGrid = populateCreatePanel();
        }
        return createPanelGrid;
    }

	public void setCreatePanelGrid(HtmlPanelGrid createPanelGrid) {
        this.createPanelGrid = createPanelGrid;
    }

	public HtmlPanelGrid getEditPanelGrid() {
        if (editPanelGrid == null) {
            editPanelGrid = populateEditPanel();
        }
        return editPanelGrid;
    }

	public void setEditPanelGrid(HtmlPanelGrid editPanelGrid) {
        this.editPanelGrid = editPanelGrid;
    }

	public HtmlPanelGrid getViewPanelGrid() {
        if (viewPanelGrid == null) {
            viewPanelGrid = populateViewPanel();
        }
        return viewPanelGrid;
    }

	public void setViewPanelGrid(HtmlPanelGrid viewPanelGrid) {
        this.viewPanelGrid = viewPanelGrid;
    }

	public HtmlPanelGrid populateCreatePanel() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        
        HtmlPanelGrid htmlPanelGrid = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
        
        HtmlOutputText usuarioCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        usuarioCreateOutput.setId("usuarioCreateOutput");
        usuarioCreateOutput.setValue("Usuario:   ");
        htmlPanelGrid.getChildren().add(usuarioCreateOutput);
        
        AutoComplete usuarioCreateInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        usuarioCreateInput.setId("usuarioCreateInput");
        usuarioCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.usuario}", Usuario.class));
        usuarioCreateInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{avisoBean.completeUsuario}", List.class, new Class[] { String.class }));
        usuarioCreateInput.setDropdown(true);
        usuarioCreateInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "usuario", String.class));
        usuarioCreateInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{usuario.nombres} #{usuario.apellidoPaterno} #{usuario.apellidoMaterno} #{usuario.sexo}", String.class));
        usuarioCreateInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{usuario}", Usuario.class));
        usuarioCreateInput.setConverter(new UsuarioConverter());
        usuarioCreateInput.setRequired(false);
        htmlPanelGrid.getChildren().add(usuarioCreateInput);
        
        Message usuarioCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        usuarioCreateInputMessage.setId("usuarioCreateInputMessage");
        usuarioCreateInputMessage.setFor("usuarioCreateInput");
        usuarioCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(usuarioCreateInputMessage);
        
        HtmlOutputText tituloCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        tituloCreateOutput.setId("tituloCreateOutput");
        tituloCreateOutput.setValue("Titulo: * ");
        htmlPanelGrid.getChildren().add(tituloCreateOutput);
        
        InputText tituloCreateInput = (InputText) application.createComponent(InputText.COMPONENT_TYPE);
        tituloCreateInput.setId("tituloCreateInput");
        tituloCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.titulo}", String.class));
        LengthValidator tituloCreateInputValidator = new LengthValidator();
        tituloCreateInputValidator.setMaximum(20);
        tituloCreateInput.addValidator(tituloCreateInputValidator);
        tituloCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(tituloCreateInput);
        
        Message tituloCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        tituloCreateInputMessage.setId("tituloCreateInputMessage");
        tituloCreateInputMessage.setFor("tituloCreateInput");
        tituloCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(tituloCreateInputMessage);
        
        HtmlOutputText mensajeCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        mensajeCreateOutput.setId("mensajeCreateOutput");
        mensajeCreateOutput.setValue("Mensaje: * ");
        htmlPanelGrid.getChildren().add(mensajeCreateOutput);
        
        InputTextarea mensajeCreateInput = (InputTextarea) application.createComponent(InputTextarea.COMPONENT_TYPE);
        mensajeCreateInput.setId("mensajeCreateInput");
        mensajeCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.mensaje}", String.class));
        LengthValidator mensajeCreateInputValidator = new LengthValidator();
        mensajeCreateInputValidator.setMaximum(100);
        mensajeCreateInput.addValidator(mensajeCreateInputValidator);
        mensajeCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(mensajeCreateInput);
        
        Message mensajeCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        mensajeCreateInputMessage.setId("mensajeCreateInputMessage");
        mensajeCreateInputMessage.setFor("mensajeCreateInput");
        mensajeCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(mensajeCreateInputMessage);
        
        HtmlOutputText posicionCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        posicionCreateOutput.setId("posicionCreateOutput");
        posicionCreateOutput.setValue("Posicion: * ");
        htmlPanelGrid.getChildren().add(posicionCreateOutput);
        
        Spinner posicionCreateInput = (Spinner) application.createComponent(Spinner.COMPONENT_TYPE);
        posicionCreateInput.setId("posicionCreateInput");
        posicionCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.posicion}", Integer.class));
        posicionCreateInput.setRequired(true);
        
        htmlPanelGrid.getChildren().add(posicionCreateInput);
        
        Message posicionCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        posicionCreateInputMessage.setId("posicionCreateInputMessage");
        posicionCreateInputMessage.setFor("posicionCreateInput");
        posicionCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(posicionCreateInputMessage);
        
        HtmlOutputText fechaInicioCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaInicioCreateOutput.setId("fechaInicioCreateOutput");
        fechaInicioCreateOutput.setValue("Fecha Inicio: * ");
        htmlPanelGrid.getChildren().add(fechaInicioCreateOutput);
        
        Calendar fechaInicioCreateInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        fechaInicioCreateInput.setId("fechaInicioCreateInput");
        fechaInicioCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.fechaInicio}", Date.class));
        fechaInicioCreateInput.setNavigator(true);
        fechaInicioCreateInput.setEffect("slideDown");
        fechaInicioCreateInput.setPattern("dd/MM/yyyy");
        fechaInicioCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(fechaInicioCreateInput);
        
        Message fechaInicioCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        fechaInicioCreateInputMessage.setId("fechaInicioCreateInputMessage");
        fechaInicioCreateInputMessage.setFor("fechaInicioCreateInput");
        fechaInicioCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(fechaInicioCreateInputMessage);
        
        HtmlOutputText fechaFinCreateOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaFinCreateOutput.setId("fechaFinCreateOutput");
        fechaFinCreateOutput.setValue("Fecha Fin: * ");
        htmlPanelGrid.getChildren().add(fechaFinCreateOutput);
        
        Calendar fechaFinCreateInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        fechaFinCreateInput.setId("fechaFinCreateInput");
        fechaFinCreateInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.fechaFin}", Date.class));
        fechaFinCreateInput.setNavigator(true);
        fechaFinCreateInput.setEffect("slideDown");
        fechaFinCreateInput.setPattern("dd/MM/yyyy");
        fechaFinCreateInput.setRequired(true);
        htmlPanelGrid.getChildren().add(fechaFinCreateInput);
        
        Message fechaFinCreateInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        fechaFinCreateInputMessage.setId("fechaFinCreateInputMessage");
        fechaFinCreateInputMessage.setFor("fechaFinCreateInput");
        fechaFinCreateInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(fechaFinCreateInputMessage);
        
        return htmlPanelGrid;
    }

	public HtmlPanelGrid populateEditPanel() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        
        HtmlPanelGrid htmlPanelGrid = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
        
        HtmlOutputText usuarioEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        usuarioEditOutput.setId("usuarioEditOutput");
        usuarioEditOutput.setValue("Usuario:   ");
        htmlPanelGrid.getChildren().add(usuarioEditOutput);
        
        AutoComplete usuarioEditInput = (AutoComplete) application.createComponent(AutoComplete.COMPONENT_TYPE);
        usuarioEditInput.setId("usuarioEditInput");
        usuarioEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.usuario}", Usuario.class));
        usuarioEditInput.setCompleteMethod(expressionFactory.createMethodExpression(elContext, "#{avisoBean.completeUsuario}", List.class, new Class[] { String.class }));
        usuarioEditInput.setDropdown(true);
        usuarioEditInput.setValueExpression("var", expressionFactory.createValueExpression(elContext, "usuario", String.class));
        usuarioEditInput.setValueExpression("itemLabel", expressionFactory.createValueExpression(elContext, "#{usuario.nombres} #{usuario.apellidoPaterno} #{usuario.apellidoMaterno} #{usuario.sexo}", String.class));
        usuarioEditInput.setValueExpression("itemValue", expressionFactory.createValueExpression(elContext, "#{usuario}", Usuario.class));
        usuarioEditInput.setConverter(new UsuarioConverter());
        usuarioEditInput.setRequired(false);
        htmlPanelGrid.getChildren().add(usuarioEditInput);
        
        Message usuarioEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        usuarioEditInputMessage.setId("usuarioEditInputMessage");
        usuarioEditInputMessage.setFor("usuarioEditInput");
        usuarioEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(usuarioEditInputMessage);
        
        HtmlOutputText tituloEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        tituloEditOutput.setId("tituloEditOutput");
        tituloEditOutput.setValue("Titulo: * ");
        htmlPanelGrid.getChildren().add(tituloEditOutput);
        
        InputText tituloEditInput = (InputText) application.createComponent(InputText.COMPONENT_TYPE);
        tituloEditInput.setId("tituloEditInput");
        tituloEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.titulo}", String.class));
        LengthValidator tituloEditInputValidator = new LengthValidator();
        tituloEditInputValidator.setMaximum(20);
        tituloEditInput.addValidator(tituloEditInputValidator);
        tituloEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(tituloEditInput);
        
        Message tituloEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        tituloEditInputMessage.setId("tituloEditInputMessage");
        tituloEditInputMessage.setFor("tituloEditInput");
        tituloEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(tituloEditInputMessage);
        
        HtmlOutputText mensajeEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        mensajeEditOutput.setId("mensajeEditOutput");
        mensajeEditOutput.setValue("Mensaje: * ");
        htmlPanelGrid.getChildren().add(mensajeEditOutput);
        
        InputTextarea mensajeEditInput = (InputTextarea) application.createComponent(InputTextarea.COMPONENT_TYPE);
        mensajeEditInput.setId("mensajeEditInput");
        mensajeEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.mensaje}", String.class));
        LengthValidator mensajeEditInputValidator = new LengthValidator();
        mensajeEditInputValidator.setMaximum(100);
        mensajeEditInput.addValidator(mensajeEditInputValidator);
        mensajeEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(mensajeEditInput);
        
        Message mensajeEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        mensajeEditInputMessage.setId("mensajeEditInputMessage");
        mensajeEditInputMessage.setFor("mensajeEditInput");
        mensajeEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(mensajeEditInputMessage);
        
        HtmlOutputText posicionEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        posicionEditOutput.setId("posicionEditOutput");
        posicionEditOutput.setValue("Posicion: * ");
        htmlPanelGrid.getChildren().add(posicionEditOutput);
        
        Spinner posicionEditInput = (Spinner) application.createComponent(Spinner.COMPONENT_TYPE);
        posicionEditInput.setId("posicionEditInput");
        posicionEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.posicion}", Integer.class));
        posicionEditInput.setRequired(true);
        
        htmlPanelGrid.getChildren().add(posicionEditInput);
        
        Message posicionEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        posicionEditInputMessage.setId("posicionEditInputMessage");
        posicionEditInputMessage.setFor("posicionEditInput");
        posicionEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(posicionEditInputMessage);
        
        HtmlOutputText fechaInicioEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaInicioEditOutput.setId("fechaInicioEditOutput");
        fechaInicioEditOutput.setValue("Fecha Inicio: * ");
        htmlPanelGrid.getChildren().add(fechaInicioEditOutput);
        
        Calendar fechaInicioEditInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        fechaInicioEditInput.setId("fechaInicioEditInput");
        fechaInicioEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.fechaInicio}", Date.class));
        fechaInicioEditInput.setNavigator(true);
        fechaInicioEditInput.setEffect("slideDown");
        fechaInicioEditInput.setPattern("dd/MM/yyyy");
        fechaInicioEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(fechaInicioEditInput);
        
        Message fechaInicioEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        fechaInicioEditInputMessage.setId("fechaInicioEditInputMessage");
        fechaInicioEditInputMessage.setFor("fechaInicioEditInput");
        fechaInicioEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(fechaInicioEditInputMessage);
        
        HtmlOutputText fechaFinEditOutput = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaFinEditOutput.setId("fechaFinEditOutput");
        fechaFinEditOutput.setValue("Fecha Fin: * ");
        htmlPanelGrid.getChildren().add(fechaFinEditOutput);
        
        Calendar fechaFinEditInput = (Calendar) application.createComponent(Calendar.COMPONENT_TYPE);
        fechaFinEditInput.setId("fechaFinEditInput");
        fechaFinEditInput.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.fechaFin}", Date.class));
        fechaFinEditInput.setNavigator(true);
        fechaFinEditInput.setEffect("slideDown");
        fechaFinEditInput.setPattern("dd/MM/yyyy");
        fechaFinEditInput.setRequired(true);
        htmlPanelGrid.getChildren().add(fechaFinEditInput);
        
        Message fechaFinEditInputMessage = (Message) application.createComponent(Message.COMPONENT_TYPE);
        fechaFinEditInputMessage.setId("fechaFinEditInputMessage");
        fechaFinEditInputMessage.setFor("fechaFinEditInput");
        fechaFinEditInputMessage.setDisplay("icon");
        htmlPanelGrid.getChildren().add(fechaFinEditInputMessage);
        
        return htmlPanelGrid;
    }

	public HtmlPanelGrid populateViewPanel() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application application = facesContext.getApplication();
        ExpressionFactory expressionFactory = application.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        
        HtmlPanelGrid htmlPanelGrid = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
        
        HtmlOutputText usuarioLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        usuarioLabel.setId("usuarioLabel");
        usuarioLabel.setValue("Usuario:   ");
        htmlPanelGrid.getChildren().add(usuarioLabel);
        
        HtmlOutputText usuarioValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        usuarioValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.usuario}", Usuario.class));
        usuarioValue.setConverter(new UsuarioConverter());
        htmlPanelGrid.getChildren().add(usuarioValue);
        
        HtmlOutputText tituloLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        tituloLabel.setId("tituloLabel");
        tituloLabel.setValue("Titulo:   ");
        htmlPanelGrid.getChildren().add(tituloLabel);
        
        HtmlOutputText tituloValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        tituloValue.setId("tituloValue");
        tituloValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.titulo}", String.class));
        htmlPanelGrid.getChildren().add(tituloValue);
        
        HtmlOutputText mensajeLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        mensajeLabel.setId("mensajeLabel");
        mensajeLabel.setValue("Mensaje:   ");
        htmlPanelGrid.getChildren().add(mensajeLabel);
        
        InputTextarea mensajeValue = (InputTextarea) application.createComponent(InputTextarea.COMPONENT_TYPE);
        mensajeValue.setId("mensajeValue");
        mensajeValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.mensaje}", String.class));
        mensajeValue.setReadonly(true);
        mensajeValue.setDisabled(true);
        htmlPanelGrid.getChildren().add(mensajeValue);
        
        HtmlOutputText posicionLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        posicionLabel.setId("posicionLabel");
        posicionLabel.setValue("Posicion:   ");
        htmlPanelGrid.getChildren().add(posicionLabel);
        
        HtmlOutputText posicionValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        posicionValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.posicion}", String.class));
        htmlPanelGrid.getChildren().add(posicionValue);
        
        HtmlOutputText fechaInicioLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaInicioLabel.setId("fechaInicioLabel");
        fechaInicioLabel.setValue("Fecha Inicio:   ");
        htmlPanelGrid.getChildren().add(fechaInicioLabel);
        
        HtmlOutputText fechaInicioValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaInicioValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.fechaInicio}", Date.class));
        DateTimeConverter fechaInicioValueConverter = (DateTimeConverter) application.createConverter(DateTimeConverter.CONVERTER_ID);
        fechaInicioValueConverter.setPattern("dd/MM/yyyy");
        fechaInicioValue.setConverter(fechaInicioValueConverter);
        htmlPanelGrid.getChildren().add(fechaInicioValue);
        
        HtmlOutputText fechaFinLabel = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaFinLabel.setId("fechaFinLabel");
        fechaFinLabel.setValue("Fecha Fin:   ");
        htmlPanelGrid.getChildren().add(fechaFinLabel);
        
        HtmlOutputText fechaFinValue = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
        fechaFinValue.setValueExpression("value", expressionFactory.createValueExpression(elContext, "#{avisoBean.aviso.fechaFin}", Date.class));
        DateTimeConverter fechaFinValueConverter = (DateTimeConverter) application.createConverter(DateTimeConverter.CONVERTER_ID);
        fechaFinValueConverter.setPattern("dd/MM/yyyy");
        fechaFinValue.setConverter(fechaFinValueConverter);
        htmlPanelGrid.getChildren().add(fechaFinValue);
        
        return htmlPanelGrid;
    }

	public Aviso getAviso() {
        if (aviso == null) {
            aviso = new Aviso();
        }
        return aviso;
    }

	public void setAviso(Aviso aviso) {
        this.aviso = aviso;
    }

	public List<Usuario> completeUsuario(String query) {
        List<Usuario> suggestions = new ArrayList<Usuario>();
        for (Usuario usuario : usuarioService.findAllUsuarios()) {
            String usuarioStr = String.valueOf(usuario.getNombres() +  " "  + usuario.getApellidoPaterno() +  " "  + usuario.getApellidoMaterno() +  " "  + usuario.getSexo());
            if (usuarioStr.toLowerCase().startsWith(query.toLowerCase())) {
                suggestions.add(usuario);
            }
        }
        return suggestions;
    }

	public String onEdit() {
        return null;
    }

	public boolean isCreateDialogVisible() {
        return createDialogVisible;
    }

	public void setCreateDialogVisible(boolean createDialogVisible) {
        this.createDialogVisible = createDialogVisible;
    }

	public String displayList() {
        createDialogVisible = false;
        findAllAvisoes();
        return "aviso";
    }

	public String displayCreateDialog() {
        aviso = new Aviso();
        createDialogVisible = true;
        return "aviso";
    }

	public String persist() {
        String message = "";
        if (aviso.getCodigo() != null) {
            avisoService.updateAviso(aviso);
            message = "Successfully updated";
        } else {
            avisoService.saveAviso(aviso);
            message = "Successfully created";
        }
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute("createDialog.hide()");
        context.execute("editDialog.hide()");
        
        FacesMessage facesMessage = new FacesMessage(message);
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        reset();
        return findAllAvisoes();
    }

	public String delete() {
        avisoService.deleteAviso(aviso);
        FacesMessage facesMessage = new FacesMessage("Successfully deleted");
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        reset();
        return findAllAvisoes();
    }

	public void reset() {
        aviso = null;
        createDialogVisible = false;
    }

	public void handleDialogClose(CloseEvent event) {
        reset();
    }
}
